#include "manger_user.h"
#include<string.h>
#include<stdlib.h>

User user[USER_MAX];
size_t cnt;

int login_index = -1;

bool logoff_user(void)
{
	if(yes_or_no())
	{
		// 把最后一个用户移动给要删除的用户位置
		user[login_index] = user[cnt-1];
		// 用户数量减1
		cnt--;
		// 还原用户的登录状态
		login_index = -1;
		print_sec("注销用户成功！",0.75);
		return true;
	}
	else
	{
		print_sec("取消注销操作！",0.75);
		return false;
	}
}

void modify_passwd(void)
{
	char passwd[7];
	printf("请输入旧密码：");
	get_passwd(passwd,sizeof(passwd));

	if(strcmp(passwd,user[login_index].passwd))
	{
		print_sec("旧密码错误，无法修改密码！",0.75);
		return;
	}

	printf("请输入新密码：");
	get_passwd(passwd,sizeof(passwd));

	char repasswd[7];
	printf("请确认新密码：");
	get_passwd(repasswd,sizeof(repasswd));

	if(0 == strcmp(passwd,repasswd))
	{
		strcpy(user[login_index].passwd,passwd);
		print_sec("修改密码成功！",0.75);
	}
	else
	{
		print_sec("两次输入的密码不符，修改失败！",0.75);
	}
}

void modify_user(void)
{
	printf("请输入用户电话：");
	get_str(user[login_index].phone,sizeof(user[login_index].phone));
	print_sec("修改用户信息成功！",0.75);
}

void sub_menu(void)
{
	for(;;)
	{
		system("clear");
		puts("*****用户信息管理模块*****");
		puts("1、注销用户");
		puts("2、修改密码");
		puts("3、修改信息");
		puts("4、退出登录");

		switch(get_cmd('1','4'))
		{
		case '1': 
			if(logoff_user())
				return;
			else
				break;
		case '2': modify_passwd(); break;
		case '3': modify_user(); break;
		case '4': login_index = -1; return;
		}
	}
}

// 以下是一级菜单的功能函数
void menu(void)
{
	system("clear");
	puts("*****用户管理模块*****");
	puts("1、注册用户");
	puts("2、用户登录");
	puts("3、遍历用户");
	puts("4、退出系统");
}

int query_user(const char* name)
{
	for(int i=0; i<cnt; i++)
	{
		if(0 == strcmp(user[i].name,name))
			return i;
	}
	return -1;
}

void register_user(void)
{
	// 判断用户是否已满
	if(cnt >= USER_MAX)
	{
		print_sec("用户数量已满，无法添加！",0.75);
		return;
	}

	// 输入用户名
	printf("请输入用户名：");
	get_str(user[cnt].name,sizeof(user[cnt].name));
	
	// 检查用户名是否被占用
	if(-1 < query_user(user[cnt].name))
	{
		print_sec("该用户名已被占用，无法注册！",0.75);
		return;
	}

	// 输入密码
	printf("请输入密码：");
	get_passwd(user[cnt].passwd,sizeof(user[cnt].passwd));

	// 再一次输入密码
	char repasswd[7];
	printf("请输入再一次输入密码：");
	get_passwd(repasswd,sizeof(repasswd));

	// 确认密码
	if(strcmp(user[cnt].passwd,repasswd))
	{
		print_sec("两次输入的密码不符，注册失败！",0.75);
		return;
	}

	// 输入电话号
	printf("请输入用于找回密码的手机号：");
	get_str(user[cnt].phone,sizeof(user[cnt].phone));

	// 初始化锁定标记
	user[cnt].lock = 0;

	// 用户数量+1
	//cnt++;
	FILE* fp=fopen("data.txt","a");
	if(NULL==fp)
		return ;
	fprintf(fp,"%s %s %s %hhd\n",user[cnt].name,user[cnt].passwd,user[cnt].phone,user[cnt].lock);
	fclose(fp);
	fp=NULL;
    cnt++;
}

void login_user(void)
{
	// 输入用户名
	char name[20];
	printf("请输入用户名：");
	get_str(name,sizeof(name));

	// 查询用户是否存在
	int index = query_user(name);
	if(-1 == index)
	{
		print_sec("该用户不存在，登录失败！",0.75);
		return;
	}

	// 判断是否被锁
	if(user[index].lock >= 3)
	{
		print_sec("该用户已经被锁定，请联系大师兄！",0.75);
		return;
	}

	// 输入密码
	char passwd[7];
	printf("请输入密码：");
	get_passwd(passwd,sizeof(passwd));

	// 比较密码
	if(0 == strcmp(user[index].passwd,passwd))
	{
		// 初始化锁定标志
		user[index].lock = 0;
		// 记录登录成功的用户下标
		login_index = index;
		// 登录成功，进入子菜单
		sub_menu();
		return;
	}

	// 锁定标志+1
	switch(++user[index].lock)
	{
	case 1: print_sec("密码错误，你还有2次机会！",0.75); break;
	case 2: print_sec("密码错误，你还有1次机会！",0.75); break;
	case 3: print_sec("三次密码错误，账号被锁定，请联系大师兄！",0.75); break;
	}

}

void show_user(void)
{
	for(int i=0; i<cnt; i++)
	{
		printf("%s %s %s %hhd\n",
			user[i].name,
			user[i].passwd,
			user[i].phone,
			user[i].lock);
	}
	anykey_continue();
}
